package ru.hh.team02.chat.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/*
 * сокет, в который можно писать строки и 
 * из которого можно читать строки.
 * 
 * отдельный класс из за трех потоков ввода-вывода, которые
 * надо открывать и закрывать
 */
public class StringSocket {
    private Socket socket;
    
    private InputStreamReader socketReader;
    private BufferedReader in;
    private PrintWriter out;
    
    public StringSocket(Socket socket) {
        this.socket = socket;
    }
    
    public String read() throws IOException {
        return in.readLine();
    }
    
    public void write(String message) {
        out.println(message);
    }
    
    public PrintWriter getWriter() {
        return out;
    }
    
    public boolean available() throws IOException {
        return socket.getInputStream().available() > 0;
    }
    
    public void openStreams() throws IOException {
        socketReader = new InputStreamReader(socket.getInputStream());
        in = new BufferedReader(socketReader);
        out = new PrintWriter(socket.getOutputStream(), true);
    }
    
    public void close() {
        out.close();    
        
        try {
            in.close();
        } catch (IOException ioException1) {
            ioException1.printStackTrace();
        } finally {
            try {
                socketReader.close();
            } catch(IOException ioException2) {
                ioException2.printStackTrace();
            } finally {
                try {
                    socket.close();
                } catch (IOException e3) {
                    e3.printStackTrace();
                }
            }
        }
    }
}
